package org.example.base;

import org.example.model.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginIntercepor implements HandlerInterceptor {
    //前置拦截：请求映射方法，执行前，进行拦截
    //方法返回boolean：true则继续执行请求映射方法，false就直接返回响应
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //假如，登录成功时，创建session并保存了键=user，值是user对象
        //这里的逻辑，都是敏感资源，才会执行的
        //获取session对象，如果获取不到返回null
        HttpSession session = request.getSession(false);
        if(session != null){
            //获取登录时保存的用户信息
            User user = (User) session.getAttribute("user");
            if (user != null) {//已登录
                //继续执行Controller中敏感资源的请求映射方法
                return true;
            }
        }
        //其他情况，都是未登录：不继续执行请求映射方法，而是直接返回响应
        response.setStatus(401);
        //也可以设置一些响应体的内容
        return false;
    }
    //后置拦截：请求映射方法，执行完以后，执行后置方法
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
//    }
}
